package com.reportes;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRResultSetDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import com.Reporte;
import com.util.Util;

import exceptions.InvalidArgumentException;

public class Bitacora extends Reporte {

	private static final String CEDULA = "cedula";
	private static final String FECHADESDE = "fechaDesde";
	private static final String FECHAHASTA = "fechaHasta";
	private String criterioSQL = " TRUE";

	@Override
	public void VerificarParametros(HttpServletRequest request)
			throws InvalidArgumentException {
		Integer cedula = Util.toInteger(request.getParameter(CEDULA));
		if (cedula != null)
			criterioSQL = " personal.cedula= " + cedula;
		if (request.getParameter(FECHADESDE) != null || request.getParameter(FECHAHASTA) != null) {
			Date fechaDesde = Util.toDate(request.getParameter(FECHADESDE),	FECHADESDE);
			Date fechaHasta = Util.toDate(request.getParameter(FECHAHASTA),	FECHADESDE);
			if (fechaDesde.getTime() > fechaHasta.getTime())
				throw new InvalidArgumentException("El parametro fechaDesde es mayor al parametro fechaHasta");
			criterioSQL += " and fecha_operacion>='" + request.getParameter(FECHADESDE) + " 00:00:00'" +
						   " and fecha_operacion<='" + request.getParameter(FECHAHASTA) + " 23:59:59'";
		}
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		Bitacora reporte = new Bitacora();
		copyAttributesTo(reporte);
		return reporte;
	}

	@Override
	protected JRDataSource executeQuery(Connection connection)
			throws SQLException {
		StringBuffer sql = new StringBuffer("SELECT")
				.append(" personal.cedula,")
				.append(" personal.nombre,")
				.append(" personal.apellido,")
				.append(" personal.telefono,")
				.append(" personal.movil,")
				.append(" bitacora.fecha_operacion as Fecha,")
				.append(" bitacora.operacion,")
				.append(" bitacora.formulario,")
				.append(" bitacora.descripcion,")
				.append(" bitacora.ip")
				.append(" FROM ")
				.append(" bitacora INNER JOIN personal ON (bitacora.personal_id  = personal.id)")
				.append(" WHERE")
				.append(criterioSQL)
				.append(" ORDER BY cedula,operacion");
		Statement statement = connection.createStatement();
		ResultSet rs = statement.executeQuery(sql.toString());
		return new JRResultSetDataSource(rs);
	}
}
